Retour à la page d’accueil

Dans cette seconde partie de la section dédiée à la vidualisation de données vous allez: - Changer l’apparence des graphiques - Combiner plusieurs graphiques dans une même figure - Inclure du dynamisme et de l’interactivité à vos graphique - Apprendre les meilleures pratique pour visualiser des données

Mise en place

Avant de rentrer dans le vif du sujet il nous faut mettre en place notre environnement de travail. Créez un nouveau script R et:

  • chargez les librairies nécessaires:
library(tidyverse)
  • changer votre répertoire de travail pour être dans le dossier session3_plots_manipulation:
setwd("~/Desktop/2021_L3_R/session3_plots_manipulation/")
  • Importez les données dans R:
expt1 <- read_tsv("../data/burghardt_et_al_2015_expt1.txt")
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   genotype = col_character(),
##   background = col_character(),
##   temperature = col_double(),
##   fluctuation = col_character(),
##   day.length = col_double(),
##   vernalization = col_character(),
##   survival.bolt = col_character(),
##   bolt = col_character(),
##   days.to.bolt = col_double(),
##   days.to.flower = col_double(),
##   rosette.leaf.num = col_double(),
##   cauline.leaf.num = col_double(),
##   blade.length.mm = col_double(),
##   total.leaf.length.mm = col_double(),
##   blade.ratio = col_double()
## )

Nous sommes maintenant prêt!

Changer l’apparence d’un graphique en utilisant les themes

Tous les élépments d’un ggplot sont modifiables. Les themes permettent de modifier l’apparence du graphique. Voici quelques exemples.

# Example de thèmes existants dans ggplot2 
ggplot(expt1, aes(genotype, days.to.flower)) +
  geom_boxplot() +
  theme_bw() +
  labs(title = "Black and white theme")

ggplot(expt1, aes(genotype, days.to.flower)) +
  geom_boxplot() +
  theme_classic() +
  labs(title = "Classic theme")

ggplot(expt1, aes(genotype, days.to.flower)) +
  geom_boxplot() +
  theme_minimal() +
  labs(title = "Minimal theme")

La fonction theme() peut être utilisée pour modifier des éléments en particulier du graphique. Il y a tellement de possibilités que le mieux est de rechercher sur internet la modification que vous voulez faire.

Par exemple, en recherchant “vertical labels x axis ggplot2” nous obtenons cette solution:

ggplot(expt1, aes(genotype, days.to.flower)) +
  geom_boxplot() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Rechercher “altering plot colours ggplot2” donne ceci, qui apporte cette solution:

ggplot(expt1, aes(genotype, days.to.flower, fill = fluctuation)) +
  geom_boxplot() +
  scale_fill_brewer(palette="Dark2")

Combiner plusieurs graphiques dans une même figure

Parfois nous voulons crée une figure contenant plusieurs graphiques, c’est le cas dans la plupart des articles scientifiques.

Par exemple le graphique que vous avez reproduit hier correspond aux panels B et C d’une figure de Burghard et al 2015


Nous allons faire quelque chose de similaire avec un scatterplot en panel A, et des boxplots en panel B.

Pour cela nous allons utiliser la fonction ggarrange() qui est dans le packqge ggpubr.

Tout d’abord, nous devons charger cette librarie dans R:

library(ggpubr)

Ensuite, faisons chaque graphique indépendament et sauvons les dans un objet:

  • Un scatterplot montrant la relation entre le nombre de feuilles et le nombre de jours jusqu’a floraison, coloré en fonction du traitement:
panelA <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
    geom_point() 
  • Des boxplots du nombre de jours jusqu’a floraison pour les différent génotypes, séparés en fonction de la témpérature, et colorés en fonction du traitement (fluctuation ou non):
panelB <- ggplot(expt1, aes(genotype, days.to.bolt, fill = fluctuation)) +
    geom_boxplot() +
    facet_grid(. ~ temperature) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Nous pouvons maintenant utiliser la fonction grid.arrange() pour combiner les graphiques ensemble:

ggarrange(panelA, panelB, nrow=2, labels =c("A", "B"),heights = c(1.5, 2))

Dynamisme et interactivité

Créer des graphiques avec des animations

Si nous postons les graphiques en ligne, cela peut apporter un plus d’inclure une animation dans le graphique, à condition que cela apporte des informations supplémentaire. C’est possible avec le package gganimate!

Tout d’abord, chargeons le package gganimate:

library(gganimate)

Pour créer une animation, il faut utiliser la fonction transition_states() à notre graphique (avec un +)

ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
    geom_point()  +
  transition_states(states = genotype, wrap = FALSE, transition_length = 1, state_length = 3) +
  ease_aes('linear') +
  labs(subtitle = "{closest_state}") 

L’animation peut ensuite être sauvée en utilisant la fonction anim_save()

Interactivité!

Pour aller plus loin, il est même possible de créer des graphiques intéractifs en utilsant le package plotly.

library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout

Il faut d’abord mettre le graphique dans un objet, puis utiliser cet objet dans la fonction ggplotly().

# Mettre le graphique dans l'objet p1
p1 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) + 
  geom_point() +
  facet_wrap(~genotype)

# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p1)

Plutôt que d’avoir un graphique par génotype, il est possible d’ajouer un curseur pour montrer les données des génotypes de manière interaction en utilisant l’argument ‘frame’:

# Mettre le graphique dans l'objet p1
p2 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation, frame=genotype)) + 
  geom_point() 

# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p2)


Bonnes pratiques de visualisation de données

Trouver le graphique approprié à nos données et à notre question

https://www.data-to-viz.com/

pie chart

barplot

Etre le plus près des données et ne pas cacher ou modifier les données étranges

boxplot, violin plot ou point?

Axes coupés ou qui ne commencent pas à zero

Comment faire ressortir le message des données

ordonner les données

Eviter de mettre trop d’info dans un graph

Bien utiliser les couleurs (+ palette daltoniens)